package gbench.appdemo.priceline.indicator;

/**
 * 价格指标数，价格指标数据是一个 pojo :每个分量信息 保存在一个成员变量field之中。
 * 可以通过field函数来进行数据获取。
 * 
 * @author xuqinghua
 *
 */
public interface IPriceIndicator {
    /**
     * 返回价格指标名称
     * @return 默认为 IPriceIndicator
     */
    default public String getName(){
        return this.getClass().getSimpleName();
    }
    
    /**
     * 提取指标的分量(field)数据
     * @param fieldName 字段名称：分量数据的字段名称
     * @return 价格指标中的field字段所对应的值
     */
    default Object field(final String fieldName) {
        Object obj = null;
        try {
            final var fld = this.getClass().getDeclaredField(fieldName);
            fld.setAccessible(true);
            obj = fld.get(this);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;
    }
    
    /**
     * 提取指标的分量(field)数据
     * @param fieldName 字段名称：分量数据的字段名称
     * @param value 设置的键值
     * @return 价格指标中的field字段所对应的值
     */
    default Object field(final String fieldName,final Object value) {
        Object obj = null;
        try {
            final var fld = this.getClass().getDeclaredField(fieldName);
            fld.setAccessible(true);
            fld.set(this, value);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;
    }
}